#if !defined(__DVC_REG_H__)
#define __DVC_REG_H__

#include <stdint.h>

#pragma pack(1)
/* 状态寄存器第 0 组 */
typedef struct dvc_reg_status0
{
    /* byte0 */
    uint8_t chg_st : 1; /* 充电管驱动输出状态标识位. 1 : 充电管驱动输出已开启 */
    uint8_t dsg_st : 1; /* 放电管驱动输出状态标识位. 1 : 放电管驱动输出已开启 */
    uint8_t ocd : 1;    /* 放电过流故障标识位. 1 : 检测到放电过流。保持高电平锁定，直到被上位机清除 */
    uint8_t scd : 1;    /* 放电短路故障标识位. 1 : 检测到放电短路。保持高电平锁定，直到被上位机清除 */
    uint8_t uv : 1;     /* 电压传感通道电池欠压故障标识位. 1 : 检测到电池 1 至电池 6 欠压。保持高电平锁定，直到被上位机清除 */
    uint8_t ov : 1;     /* 电压传感通道电池过压故障标识位. 1 : 检测到电池 1 至电池 6 过压。保持高电平锁定，直到被上位机清除 */
    uint8_t occ : 1;    /* 充电过流故障标识位. 1 : 检测到充电过流。保持高电平锁定，直到被上位机清除 */
    uint8_t alt_pd : 1; /* ALERT 引脚外部下拉标识位。仅在 ALERT 引脚未被内部下拉时有效. 1 : 检测到外部下拉。保持高电平锁定，直到被上位机清除 */
    /* byte1 */
    uint8_t cs_st : 1;    /* 电流传感通道工作状态标识位. 1 : 电流传感通道处于故障模式 */
    uint8_t vs_st : 1;    /* 电压传感通道工作状态标识位. 1 : 电压传感通道处于故障模式 */
    uint8_t invalid1 : 4; /* 无效位 */
    uint8_t ld : 1;       /* 负载检测标识位。仅在充电管驱动输出关闭时有效. 1 : 检测到负载连接 */
    uint8_t invalid2 : 1; /* 无效位 */
    /* byte2-3 : 电压传感通道电压总和测量值。将 SOC[14:0]转换为无符号十进制数 NSOC，电池 1 至电池 6 电压总和：VSOC=NSOC×1.465mV。该值在电压传感通道关闭时会被清零 */
    uint8_t soc_h; /* soc[8-14] */
    uint8_t soc_l; /* soc[0-7] */
    /* byte4-5 : 电流传感通道测量 SRP 和 SRN 两端电压差值。将 CSV[15:0]转换为有符号十进制数 NCS，SRP 与 SRN 两端电压差：VCS=NCS×9.155μV。由于放电和充电时的电流方向相反，所以当电压差为正值时表示正在放电，电压差为负值时表示正在充电。该值在电流传感通道关闭时会被清零 */
    uint8_t csv_h; /* csv[8-15] */
    uint8_t csv_l; /* csv[0-7] */
} dvc_reg_status0_t;

/* 状态寄存器第 1 组 */
typedef struct dvc_reg_status1
{
    /* byte0-1 : 第 1 节电池电压测量值，将 C1V[14:0]转换为无符号十进制数 NC1，第 1 节电池电压：VC1=NC1×183.1μV。该值在电压传感通道关闭时会被清零 */
    uint8_t c1v_h; /* c1v[8-14] */
    uint8_t c1v_l; /* c1v[0-7] */
    /* byte2-3 : 第 2 节电池电压测量值，将 C2V[14:0]转换为无符号十进制数 NC2，第 2 节电池电压：VC2=NC2×183.1μV。该值在电压传感通道关闭时会被清零 */
    uint8_t c2v_h; /* c2v[8-14] */
    uint8_t c2v_l; /* c2v[0-7] */
    /* byte4-5 : 第 3 节电池电压测量值，将 C3V[14:0]转换为无符号十进制数 NC3，第 3 节电池电压：VC3=NC3×183.1μV。该值在电压传感通道关闭时会被清零 */
    uint8_t c3v_h; /* c3v[8-14] */
    uint8_t c3v_l; /* c3v[0-7] */
} dvc_reg_status1_t;

/* 状态寄存器第 2 组 */
typedef struct dvc_reg_status2
{
    /* byte0-1 : 第 4 节电池电压测量值，将 C4V[14:0]转换为无符号十进制数 NC1，第 4 节电池电压：VC4=NC4×183.1μV。该值在电压传感通道关闭时会被清零 */
    uint8_t c4v_h; /* c4v[8-14] */
    uint8_t c4v_l; /* c4v[0-7] */
    /* byte2-3 : 第 5 节电池电压测量值，将 C5V[14:0]转换为无符号十进制数 NC5，第 5 节电池电压：VC5=NC5×183.1μV。该值在电压传感通道关闭时会被清零 */
    uint8_t c5v_h; /* c5v[8-14] */
    uint8_t c5v_l; /* c5v[0-7] */
    /* byte4-5 : 第 6 节电池电压测量值，将 C6V[14:0]转换为无符号十进制数 NC6，第 6 节电池电压：VC6=NC6×183.1μV。该值在电压传感通道关闭时会被清零 */
    uint8_t c6v_h; /* c6v[8-14] */
    uint8_t c6v_l; /* c6v[0-7] */
} dvc_reg_status2_t;

/* 状态寄存器第 3 组 */
typedef struct dvc_reg_status3
{
    /* byte0-1 : 热敏电阻电压测量值，将 TSV[14:0]转换为无符号十进制数 NTS，热敏电阻电压测量值：VTS=NTS×183.1μV。该值在电压传感通道关闭时会被清零 */
    uint8_t tsv_h; /* tsv[8-14] */
    uint8_t tsv_l; /* tsv[0-7] */
    /* byte2-5 : 芯片温度电压测量值，将 TCV[14:0]转换为无符号十进制数 NTC，芯片温度电压：VTC=NTC×183.1μV。该值在电压传感通道关闭时会被清零 */
    uint8_t tcv_h;    /* tcv[8-14] */
    uint8_t tcv_l;    /* tcv[0-7] */
    uint16_t invalid; /* 无效位 */
} dvc_reg_status3_t;

/* 配置寄存器第 0 组 */
typedef struct dvc_reg_cfg0
{
    /* byte0: 复位默认值 : 0b11111100 */
    uint8_t chg_en : 1;  /* 充电管驱动输出使能. 1 : 充电管驱动输出由硬件保护模块决定 */
    uint8_t dsg_en : 1;  /* 放电管驱动输出使能. 1 : 放电管驱动输出由硬件保护模块决定 */
    uint8_t vref_vs : 1; /* 参考电压输出电压选择 0 : 参考电压输出电压为 2.5V. 1 : 参考电压输出电压为 3.3V */
    uint8_t vout_vs : 1; /* LDO 输出电压选择 0 : LDO 输出电压为 2.5V. 1 : LDO 输出电压为 3.3V */
    uint8_t vout_en : 1; /* LDO 输出使能 1 : LDO 输出开启 */
    uint8_t cp_en : 1;   /* 电流硬件保护使能 1 : 电流硬件保护开启 */
    uint8_t cs_en : 1;   /* 电流传感通道使能 1 : 电流传感通道开启 */
    uint8_t vs_en : 1;   /* 电压传感通道使能 1 : 电压传感通道开启 */
    /* byte1: 复位默认值 : 0b00000000 */
    uint8_t cb1 : 1;      /* 第 1 节电池被动均衡驱动器使能。用户可以同时开启所有电池均衡，芯片会自动设置均衡周期. 1 : 第 1 节电池被动均衡驱动器开启 */
    uint8_t cb2 : 1;      /* 第 2 节电池被动均衡驱动器使能。用户可以同时开启所有电池均衡，芯片会自动设置均衡周期. 1 : 第 2 节电池被动均衡驱动器开启 */
    uint8_t cb3 : 1;      /* 第 3 节电池被动均衡驱动器使能。用户可以同时开启所有电池均衡，芯片会自动设置均衡周期. 1 : 第 3 节电池被动均衡驱动器开启 */
    uint8_t cb4 : 1;      /* 第 4 节电池被动均衡驱动器使能。用户可以同时开启所有电池均衡，芯片会自动设置均衡周期. 1 : 第 4 节电池被动均衡驱动器开启 */
    uint8_t cb5 : 1;      /* 第 5 节电池被动均衡驱动器使能。用户可以同时开启所有电池均衡，芯片会自动设置均衡周期. 1 : 第 5 节电池被动均衡驱动器开启 */
    uint8_t cb6 : 1;      /* 第 6 节电池被动均衡驱动器使能。用户可以同时开启所有电池均衡，芯片会自动设置均衡周期. 1 : 第 6 节电池被动均衡驱动器开启 */
    uint8_t invalid0 : 2; /* 第 6 节电池被动均衡驱动器使能。用户可以同时开启所有电池均衡，芯片会自动设置均衡周期. 1 : 第 6 节电池被动均衡驱动器开启 */
    /* byte2: 复位默认值 : 0b00000000 */
    uint8_t cs_pt : 3; /* 电流传感通道轮询周期选择: 参考 : dvc_cs_vs_pt_t 枚举类型 */
    uint8_t vs_pt : 3; /* 电压传感通道轮询周期选择。当轮询周期设置为连续模式时，开启电池 1 至电池 6 中任一节电池均衡，轮询周期会被自动延长到 2s : 参考 : dvc_cs_vs_pt_t 枚举类型*/
    uint8_t ld_en : 2; /* 负载检测使能 : 参考 : dvc_ld_en_t 枚举类型 */
    /* byte3: 复位默认值 : 0b11100000 */
    uint8_t invalid1 : 2; /* 无效位 */
    uint8_t vrm : 2;      /* VREF 工作模式, 参考 : dvc_vrm_t 枚举类型  */
    uint8_t wdm : 2;      /* 电压传感通道看门狗超时保护模式, 参考 : dvc_wdm_t 枚举类型  */
    uint8_t apm : 2;      /* 警报下拉检测模式, 参考 : dvc_apm_t 枚举类型  */
    /* byte4: 复位默认值 : 0b10001000 */
    uint8_t dsg_ocd : 1; /* 放电管驱动输出屏蔽放电过流警报选择: 0 : 当检测到放电过流警报时，强制关闭放电管驱动输出  1 : 屏蔽放电过流警报的保护动作 */
    uint8_t dsg_scd : 1; /* 放电管驱动输出屏蔽放电短路警报选择: 0 : 当检测到放电短路警报时，强制关闭放电管驱动输出  1 : 屏蔽放电短路警报的保护动作 */
    uint8_t dsg_uv : 1;  /* 放电管驱动输出屏蔽电池#1 至电池#6 欠压警报选择: 0 : 当检测到电池#1 至电池#6 出现欠压警报时，强制关闭放电管驱动输出  1 : 屏蔽电池#1 至电池#6 欠压警报的保护动作 */
    uint8_t dsg_ov : 1;  /* 放电管驱动输出屏蔽电池#1 至电池#6 过压警报选择: 0 : 当检测到电池#1 至电池#6 出现过压警报时，强制关闭放电管驱动输出  1 : 屏蔽电池#1 至电池#6 过压警报的保护动作 */
    uint8_t dsg_alt : 1; /* 放电管驱动输出屏蔽警报下拉选择: 0 : 当检测到警报下拉时，强制关闭放电管驱动输出  1 : 屏蔽警报下拉的保护动作 */
    uint8_t dsg_cs : 1;  /* 放电管驱动输出屏蔽电流传感通道故障选择: 0 : 当电流传感通道进入故障模式时，强制关闭放电管驱动输出  1 : 屏蔽电流传感通道故障的保护动作 */
    uint8_t dsg_vs : 1;  /* 放电管驱动输出屏蔽电压传感通道故障选择: 0 : 当电压传感通道进入故障模式时，强制关闭放电管驱动输出  1 : 屏蔽电压传感通道故障的保护动作 */
    uint8_t dsg_occ : 1; /* 放电管驱动输出屏蔽充电过流警报选择: 0 : 当检测到充电过流警报时，强制关闭放电管驱动输出  1 : 屏蔽充电过流警报的保护动作 */
    /* byte5: 复位默认值 : 0b00000111 */
    uint8_t chg_ocd : 1; /* 充电管驱动输出屏蔽放电过流警报选择: 0 : 当检测到放电过流警报时，强制关闭充电管驱动输出  1 : 屏蔽放电过流警报的保护动作 */
    uint8_t chg_scd : 1; /* 充电管驱动输出屏蔽放电短路警报选择: 0 : 当检测到放电短路警报时，强制关闭充电管驱动输出  1 : 屏蔽放电短路警报的保护动作 */
    uint8_t chg_uv : 1;  /* 充电管驱动输出屏蔽电池#1 至电池#6 欠压警报选择: 0 : 当检测到电池#1 至电池#6 出现欠压警报时，强制关闭充电管驱动输出  1 : 屏蔽电池#1 至电池#6 欠压警报的保护动作 */
    uint8_t chg_ov : 1;  /* 充电管驱动输出屏蔽电池#1 至电池#6 过压警报选择: 0 : 当检测到电池#1 至电池#6 出现过压警报时，强制关闭充电管驱动输出  1 : 屏蔽电池#1 至电池#6 过压警报的保护动作 */
    uint8_t chg_alt : 1; /* 充电管驱动输出屏蔽警报下拉选择: 0 : 当检测到警报下拉时，强制关闭充电管驱动输出  1 : 屏蔽警报下拉的保护动作 */
    uint8_t chg_cs : 1;  /* 充电管驱动输出屏蔽电流传感通道故障选择: 0 : 当电流传感通道进入故障模式时，强制关闭充电管驱动输出  1 : 屏蔽电流传感通道故障的保护动作 */
    uint8_t chg_vs : 1;  /* 充电管驱动输出屏蔽电压传感通道故障选择: 0 : 当电压传感通道进入故障模式时，强制关闭充电管驱动输出  1 : 屏蔽电压传感通道故障的保护动作 */
    uint8_t chg_occ : 1; /* 充电管驱动输出屏蔽充电过流警报选择: 0 : 当检测到充电过流警报时，强制关闭充电管驱动输出  1 : 屏蔽充电过流警报的保护动作 */
} dvc_reg_cfg0_t;

/* 配置寄存器第 1 组 */
typedef struct dvc_reg_cfg1
{
    /* byte0: 复位默认值 : 0x00 */
    uint8_t occt : 4;  /* 充电过流保护阈值[mV]: 参考 dvc_occt_t 枚举类型 */
    uint8_t occd : 3;  /* 充电过流保护延时[ms]: 参考 dvc_occd_t 枚举类型 */
    uint8_t cp_gc : 1; /* 电流硬件保护检测倍率: 0 : 电流硬件保护检测倍率 X1  1 : 电流硬件保护检测倍率 X2 */
    /* byte1: 复位默认值 : 0x00 */
    uint8_t ocdt : 4;     /* 放电过流保护阈值[mV]: 参考 dvc_occt_t 枚举类型 */
    uint8_t ocdd : 3;     /* 放电过流保护延时[ms]: 参考 dvc_occd_t 枚举类型 */
    uint8_t invalid0 : 1; /* 无效位 */
    /* byte2: 复位默认值 : 0x00 */
    uint8_t scdt : 4;     /* 放电短路保护阈值[mV]: 参考 dvc_scdt_t 枚举类型 */
    uint8_t scdd : 2;     /* 放电短路保护延时[us]: 参考 dvc_scdd_t 枚举类型 */
    uint8_t invalid1 : 2; /* 无效位 */
    /* byte3: 复位默认值 : 0x00 */
    uint8_t uvd : 2;      /* 电池#1 至电池#6 欠压保护延时 : 参考 dvc_uvd_t 枚举类型 */
    uint8_t ovd : 2;      /* 电池#1 至电池#6 过压保护延时 : 参考 dvc_ovd_t 枚举类型 */
    uint8_t invalid2 : 1; /* 无效位 */
    uint8_t cadc_tm : 1;  /* CADC 电流采样时间选择[ms]: 0 : 64ms | 1 : 256ms */
    uint8_t invalid3 : 2; /* 无效位 */
    /* byte4: 复位默认值 : 0b10101010 */
    uint8_t ovt; /* 电池#1 至电池#6 过压保护阈值, 参考 dvc_ovt_t 枚举类型。芯片支持的电池过压阈值范围为 3.2V~4.7V，步进为 5.86mV。将 OVTH[7:0]转换为无符号十进制数 NOV，电池#1 至电池#6 过压保护阈值：VOV=(NOV+546)×5.86mV。例如芯片默认设置为 0xAA，对应 NOV=170，VOV=(170+546)×5.86mV≈4.196V */
    /* byte5: 复位默认值 : 0b01100110 */
    uint8_t uvt; /* 电池#1 至电池#6 欠压保护阈值, 参考 dvc_uvt_t 枚举类型。芯片支持的电池欠压阈值范围为 1.9V~3.4V，步进为 5.86mV。当电池电压低于 0.498V 时 不 会 触 发 电 池 欠 压 警 报 。 将 UVTH[7:0] 转 换 为 无 符 号 十 进 制 数 NUV ， 电 池 #1 至 电 池 #6 欠 压 保 护 阈 值 ：VUV=(NUV+324)×5.86mV。例如芯片默认设置为 0x66，对应 NUV=102，VUV=(102+324)×5.86mV≈2.496V */
} dvc_reg_cfg1_t;

typedef enum dvc_cs_vs_pt
{
    dvc_cs_vs_pt_continuous = 0, /* 连续模式 */
    dvc_cs_vs_pt_1s,             /* 轮询周期为 1s */
    dvc_cs_vs_pt_2s,             /* 轮询周期为 2s */
    dvc_cs_vs_pt_4s,             /* 轮询周期为 4s */
    dvc_cs_vs_pt_8s,             /* 轮询周期为 8s */
    dvc_cs_vs_pt_16s,            /* 轮询周期为 16s */
    dvc_cs_vs_pt_32s,            /* 轮询周期为 32s */
    dvc_cs_vs_pt_64s,            /* 轮询周期为 64s */
} dvc_cs_vs_pt_t;

typedef enum dvc_ld_en
{
    dvc_ld_en_auto = 0, /* 自动负载检测 */
    dvc_ld_en_auto2,    /* 自动负载检测 */
    dvc_ld_en_disable,  /* 负载检测关闭 */
    dvc_ld_en_enable,   /* 负载检测开启 */
} dvc_ld_en_t;

typedef enum dvc_apm
{
    dvc_apm_enable,  /* 警报下拉检测开启 */
    dvc_apm_vout,    /* 当 VOUT 输出关闭时，警报下拉检测关闭；当 VOUT 输出开启时，警报下拉检测开启 */
    dvc_apm_cap,     /* 当 CAP 输出关闭时，警报下拉检测关闭；当CAP 输出开启时，警报下拉检测开启 */
    dvc_apm_disable, /* 警报下拉检测关闭 */
} dvc_apm_t;

typedef enum dvc_wdm
{
    dvc_wdm_disable,     /* 看门狗超时保护关闭 */
    dvc_wdm_sleep,       /* 看门狗超时后芯片进入睡眠模式 */
    dvc_wdm_retry_sleep, /* 看门狗首次超时后关闭 VOUT 输出，间隔 1s 后开启 VOUT 输出，若 8s 内收到有效 SPI 指令则看门狗恢复正常模式，否则芯片进入睡眠模式 */
    dvc_apm_reset_vout,  /* 看门狗超时后反复重启 VOUT 输出，芯片不进入睡眠模式 */
} dvc_wdm_t;

typedef enum dvc_vrm
{
    dvc_vrm_auto,    /* 自动模式。当测量热敏电阻电压时开启 VREF 输出，其余时间关闭 VREF 输出 */
    dvc_vrm_auto2,   /* 自动模式。当测量热敏电阻电压时开启 VREF 输出，其余时间关闭 VREF 输出 */
    dvc_vrm_disable, /* VREF 输出关闭 */
    dvc_vrm_enable,  /* VREF 输出开启 */
} dvc_vrm_t;

typedef enum dvc_occt
{
    dvc_occt_2_3mv,  /* cp_gc0 : 2.3mv | cp_gc1 : 4.4mv */
    dvc_occt_5_2mv,  /* cp_gc0 : 5.2mv | cp_gc1 : 10.1mv */
    dvc_occt_8_1mv,  /* cp_gc0 : 8.1mv | cp_gc1 : 15.8mv */
    dvc_occt_10_9mv, /* cp_gc0 : 10.9mv | cp_gc1 : 21.5mv */
    dvc_occt_13_8mv, /* cp_gc0 : 13.8mv | cp_gc1 : 27.2mv */
    dvc_occt_16_7mv, /* cp_gc0 : 16.7mv | cp_gc1 : 32.9mv */
    dvc_occt_19_6mv, /* cp_gc0 : 19.6mv | cp_gc1 : 38.6mv */
    dvc_occt_22_5mv, /* cp_gc0 : 22.5mv | cp_gc1 : 44.3mv */
    dvc_occt_25_3mv, /* cp_gc0 : 25.3mv | cp_gc1 : 50.0mv */
    dvc_occt_28_2mv, /* cp_gc0 : 28.2mv | cp_gc1 : 55.7mv */
    dvc_occt_31_1mv, /* cp_gc0 : 31.1mv | cp_gc1 : 61.4mv */
    dvc_occt_34_0mv, /* cp_gc0 : 34.0mv | cp_gc1 : 67.1mv */
    dvc_occt_36_9mv, /* cp_gc0 : 36.9mv | cp_gc1 : 72.8mv */
    dvc_occt_39_7mv, /* cp_gc0 : 39.7mv | cp_gc1 : 78.6mv */
    dvc_occt_42_6mv, /* cp_gc0 : 42.6mv | cp_gc1 : 84.3mv */
    dvc_occt_45_5mv, /* cp_gc0 : 45.5mv | cp_gc1 : 90.0mv */
} dvc_occt_t;

typedef enum dvc_occd
{
    dvc_occd_32ms,   /* 32ms */
    dvc_occd_80ms,   /* 80ms */
    dvc_occd_160ms,  /* 160ms */
    dvc_occd_320ms,  /* 320ms */
    dvc_occd_640ms,  /* 640ms */
    dvc_occd_1280ms, /* 1280ms */
    dvc_occd_2560ms, /* 2560ms */
    dvc_occd_5120ms, /* 5120ms */
} dvc_occd_t;

typedef enum dvc_scdt
{
    dvc_occt_9_7mv,  /* cp_gc0 : 9.7mv | cp_gc1 : 18.8mv */
    dvc_occt_15_4mv, /* cp_gc0 : 15.4mv | cp_gc1 : 30.2mv */
    dvc_occt_21_1mv, /* cp_gc0 : 21.1mv | cp_gc1 : 41.5mv */
    dvc_occt_26_8mv, /* cp_gc0 : 16.8mv | cp_gc1 : 52.8mv */
    dvc_occt_32_6mv, /* cp_gc0 : 32.6mv | cp_gc1 : 64.2mv */
    dvc_occt_38_3mv, /* cp_gc0 : 38.3mv | cp_gc1 : 75.5mv */
    dvc_occt_44_0mv, /* cp_gc0 : 44.0mv | cp_gc1 : 86.8mv */
    dvc_occt_49_7mv, /* cp_gc0 : 49.7mv | cp_gc1 : 98.2mv */
    dvc_occt_55_4mv, /* cp_gc0 : 55.4mv | cp_gc1 : 109.5mv */
    dvc_occt_61_2mv, /* cp_gc0 : 61.2mv | cp_gc1 : 120.8mv */
    dvc_occt_66_9mv, /* cp_gc0 : 66.9mv | cp_gc1 : 132.1mv */
    dvc_occt_72_6mv, /* cp_gc0 : 72.6mv | cp_gc1 : 143.5mv */
    dvc_occt_78_3mv, /* cp_gc0 : 78.3mv | cp_gc1 : 154.8mv */
    dvc_occt_84_0mv, /* cp_gc0 : 84.0mv | cp_gc1 : 166.1mv */
    dvc_occt_89_8mv, /* cp_gc0 : 89.8mv | cp_gc1 : 177.5mv */
    dvc_occt_95_5mv, /* cp_gc0 : 95.5mv | cp_gc1 : 188.8mv */
} dvc_scdt_t;

typedef enum dvc_scdd
{
    dvc_scdd_400us,  /* 400us */
    dvc_scdd_500us,  /* 500us */
    dvc_scdd_900us,  /* 900us */
    dvc_scdd_1600us, /* 1600us */
} dvc_scdd_t;

typedef enum dvc_uvd
{
    dvc_uvd_1s,  /* 1s */
    dvc_uvd_4s,  /* 4s */
    dvc_uvd_8s,  /* 8s */
    dvc_uvd_16s, /* 16s */
} dvc_uvd_t;

typedef enum dvc_ovd
{
    dvc_ovd_1s, /* 1s */
    dvc_ovd_2s, /* 2s */
    dvc_ovd_4s, /* 4s */
    dvc_ovd_8s, /* 8s */
} dvc_ovd_t;

typedef enum dvc_ovt
{
    dvc_ovt_3_199V, dvc_ovt_3_205V, dvc_ovt_3_211V, dvc_ovt_3_217V, 
    dvc_ovt_3_223V, dvc_ovt_3_228V, dvc_ovt_3_234V, dvc_ovt_3_240V, 
    dvc_ovt_3_246V, dvc_ovt_3_252V, dvc_ovt_3_258V, dvc_ovt_3_264V, 
    dvc_ovt_3_269V, dvc_ovt_3_275V, dvc_ovt_3_281V, dvc_ovt_3_287V, 
    dvc_ovt_3_293V, dvc_ovt_3_299V, dvc_ovt_3_305V, dvc_ovt_3_310V, 
    dvc_ovt_3_316V, dvc_ovt_3_322V, dvc_ovt_3_328V, dvc_ovt_3_334V, 
    dvc_ovt_3_340V, dvc_ovt_3_346V, dvc_ovt_3_351V, dvc_ovt_3_357V, 
    dvc_ovt_3_363V, dvc_ovt_3_369V, dvc_ovt_3_375V, dvc_ovt_3_381V, 
    dvc_ovt_3_387V, dvc_ovt_3_392V, dvc_ovt_3_398V, dvc_ovt_3_404V, 
    dvc_ovt_3_410V, dvc_ovt_3_416V, dvc_ovt_3_422V, dvc_ovt_3_428V, 
    dvc_ovt_3_433V, dvc_ovt_3_439V, dvc_ovt_3_445V, dvc_ovt_3_451V, 
    dvc_ovt_3_457V, dvc_ovt_3_463V, dvc_ovt_3_469V, dvc_ovt_3_474V, 
    dvc_ovt_3_480V, dvc_ovt_3_486V, dvc_ovt_3_492V, dvc_ovt_3_498V, 
    dvc_ovt_3_504V, dvc_ovt_3_510V, dvc_ovt_3_516V, dvc_ovt_3_521V, 
    dvc_ovt_3_527V, dvc_ovt_3_533V, dvc_ovt_3_539V, dvc_ovt_3_545V, 
    dvc_ovt_3_551V, dvc_ovt_3_557V, dvc_ovt_3_562V, dvc_ovt_3_568V, 
    dvc_ovt_3_574V, dvc_ovt_3_580V, dvc_ovt_3_586V, dvc_ovt_3_592V, 
    dvc_ovt_3_598V, dvc_ovt_3_603V, dvc_ovt_3_609V, dvc_ovt_3_615V, 
    dvc_ovt_3_621V, dvc_ovt_3_627V, dvc_ovt_3_633V, dvc_ovt_3_639V, 
    dvc_ovt_3_644V, dvc_ovt_3_650V, dvc_ovt_3_656V, dvc_ovt_3_662V, 
    dvc_ovt_3_668V, dvc_ovt_3_674V, dvc_ovt_3_680V, dvc_ovt_3_685V, 
    dvc_ovt_3_691V, dvc_ovt_3_697V, dvc_ovt_3_703V, dvc_ovt_3_709V, 
    dvc_ovt_3_715V, dvc_ovt_3_721V, dvc_ovt_3_726V, dvc_ovt_3_732V, 
    dvc_ovt_3_738V, dvc_ovt_3_744V, dvc_ovt_3_750V, dvc_ovt_3_756V, 
    dvc_ovt_3_762V, dvc_ovt_3_767V, dvc_ovt_3_773V, dvc_ovt_3_779V, 
    dvc_ovt_3_785V, dvc_ovt_3_791V, dvc_ovt_3_797V, dvc_ovt_3_803V, 
    dvc_ovt_3_809V, dvc_ovt_3_814V, dvc_ovt_3_820V, dvc_ovt_3_826V, 
    dvc_ovt_3_832V, dvc_ovt_3_838V, dvc_ovt_3_844V, dvc_ovt_3_850V, 
    dvc_ovt_3_855V, dvc_ovt_3_861V, dvc_ovt_3_867V, dvc_ovt_3_873V, 
    dvc_ovt_3_879V, dvc_ovt_3_885V, dvc_ovt_3_891V, dvc_ovt_3_896V, 
    dvc_ovt_3_902V, dvc_ovt_3_908V, dvc_ovt_3_914V, dvc_ovt_3_920V, 
    dvc_ovt_3_926V, dvc_ovt_3_932V, dvc_ovt_3_937V, dvc_ovt_3_943V, 
    dvc_ovt_3_949V, dvc_ovt_3_955V, dvc_ovt_3_961V, dvc_ovt_3_967V, 
    dvc_ovt_3_973V, dvc_ovt_3_978V, dvc_ovt_3_984V, dvc_ovt_3_990V, 
    dvc_ovt_3_996V, dvc_ovt_4_2V, dvc_ovt_4_8V, dvc_ovt_4_14V, 
    dvc_ovt_4_19V, dvc_ovt_4_25V, dvc_ovt_4_31V, dvc_ovt_4_37V, 
    dvc_ovt_4_43V, dvc_ovt_4_49V, dvc_ovt_4_55V, dvc_ovt_4_60V, 
    dvc_ovt_4_66V, dvc_ovt_4_72V, dvc_ovt_4_78V, dvc_ovt_4_84V, 
    dvc_ovt_4_90V, dvc_ovt_4_96V, dvc_ovt_4_102V, dvc_ovt_4_107V, 
    dvc_ovt_4_113V, dvc_ovt_4_119V, dvc_ovt_4_125V, dvc_ovt_4_131V, 
    dvc_ovt_4_137V, dvc_ovt_4_143V, dvc_ovt_4_148V, dvc_ovt_4_154V, 
    dvc_ovt_4_160V, dvc_ovt_4_166V, dvc_ovt_4_172V, dvc_ovt_4_178V, 
    dvc_ovt_4_184V, dvc_ovt_4_189V, dvc_ovt_4_195V, dvc_ovt_4_201V, 
    dvc_ovt_4_207V, dvc_ovt_4_213V, dvc_ovt_4_219V, dvc_ovt_4_225V, 
    dvc_ovt_4_230V, dvc_ovt_4_236V, dvc_ovt_4_242V, dvc_ovt_4_248V, 
    dvc_ovt_4_254V, dvc_ovt_4_260V, dvc_ovt_4_266V, dvc_ovt_4_271V, 
    dvc_ovt_4_277V, dvc_ovt_4_283V, dvc_ovt_4_289V, dvc_ovt_4_295V, 
    dvc_ovt_4_301V, dvc_ovt_4_307V, dvc_ovt_4_312V, dvc_ovt_4_318V, 
    dvc_ovt_4_324V, dvc_ovt_4_330V, dvc_ovt_4_336V, dvc_ovt_4_342V, 
    dvc_ovt_4_348V, dvc_ovt_4_353V, dvc_ovt_4_359V, dvc_ovt_4_365V, 
    dvc_ovt_4_371V, dvc_ovt_4_377V, dvc_ovt_4_383V, dvc_ovt_4_389V, 
    dvc_ovt_4_395V, dvc_ovt_4_400V, dvc_ovt_4_406V, dvc_ovt_4_412V, 
    dvc_ovt_4_418V, dvc_ovt_4_424V, dvc_ovt_4_430V, dvc_ovt_4_436V, 
    dvc_ovt_4_441V, dvc_ovt_4_447V, dvc_ovt_4_453V, dvc_ovt_4_459V, 
    dvc_ovt_4_465V, dvc_ovt_4_471V, dvc_ovt_4_477V, dvc_ovt_4_482V, 
    dvc_ovt_4_488V, dvc_ovt_4_494V, dvc_ovt_4_500V, dvc_ovt_4_506V, 
    dvc_ovt_4_512V, dvc_ovt_4_518V, dvc_ovt_4_523V, dvc_ovt_4_529V, 
    dvc_ovt_4_535V, dvc_ovt_4_541V, dvc_ovt_4_547V, dvc_ovt_4_553V, 
    dvc_ovt_4_559V, dvc_ovt_4_564V, dvc_ovt_4_570V, dvc_ovt_4_576V, 
    dvc_ovt_4_582V, dvc_ovt_4_588V, dvc_ovt_4_594V, dvc_ovt_4_600V, 
    dvc_ovt_4_605V, dvc_ovt_4_611V, dvc_ovt_4_617V, dvc_ovt_4_623V, 
    dvc_ovt_4_629V, dvc_ovt_4_635V, dvc_ovt_4_641V, dvc_ovt_4_646V, 
    dvc_ovt_4_652V, dvc_ovt_4_658V, dvc_ovt_4_664V, dvc_ovt_4_670V, 
    dvc_ovt_4_676V, dvc_ovt_4_682V, dvc_ovt_4_688V, dvc_ovt_4_693V,
} dvc_ovt_t;

typedef enum dvc_uvt
{
    dvc_uvt_1_898V, dvc_uvt_1_904V, dvc_uvt_1_910V, dvc_uvt_1_916V, 
    dvc_uvt_1_922V, dvc_uvt_1_927V, dvc_uvt_1_933V, dvc_uvt_1_939V, 
    dvc_uvt_1_945V, dvc_uvt_1_951V, dvc_uvt_1_957V, dvc_uvt_1_963V, 
    dvc_uvt_1_968V, dvc_uvt_1_974V, dvc_uvt_1_980V, dvc_uvt_1_986V, 
    dvc_uvt_1_992V, dvc_uvt_1_998V, dvc_uvt_2_4V, dvc_uvt_2_9V, 
    dvc_uvt_2_15V, dvc_uvt_2_21V, dvc_uvt_2_27V, dvc_uvt_2_33V, 
    dvc_uvt_2_39V, dvc_uvt_2_45V, dvc_uvt_2_51V, dvc_uvt_2_56V, 
    dvc_uvt_2_62V, dvc_uvt_2_68V, dvc_uvt_2_74V, dvc_uvt_2_80V, 
    dvc_uvt_2_86V, dvc_uvt_2_92V, dvc_uvt_2_97V, dvc_uvt_2_103V, 
    dvc_uvt_2_109V, dvc_uvt_2_115V, dvc_uvt_2_121V, dvc_uvt_2_127V, 
    dvc_uvt_2_133V, dvc_uvt_2_138V, dvc_uvt_2_144V, dvc_uvt_2_150V, 
    dvc_uvt_2_156V, dvc_uvt_2_162V, dvc_uvt_2_168V, dvc_uvt_2_174V, 
    dvc_uvt_2_179V, dvc_uvt_2_185V, dvc_uvt_2_191V, dvc_uvt_2_197V, 
    dvc_uvt_2_203V, dvc_uvt_2_209V, dvc_uvt_2_215V, dvc_uvt_2_220V, 
    dvc_uvt_2_226V, dvc_uvt_2_232V, dvc_uvt_2_238V, dvc_uvt_2_244V, 
    dvc_uvt_2_250V, dvc_uvt_2_256V, dvc_uvt_2_261V, dvc_uvt_2_267V, 
    dvc_uvt_2_273V, dvc_uvt_2_279V, dvc_uvt_2_285V, dvc_uvt_2_291V, 
    dvc_uvt_2_297V, dvc_uvt_2_302V, dvc_uvt_2_308V, dvc_uvt_2_314V, 
    dvc_uvt_2_320V, dvc_uvt_2_326V, dvc_uvt_2_332V, dvc_uvt_2_338V, 
    dvc_uvt_2_344V, dvc_uvt_2_349V, dvc_uvt_2_355V, dvc_uvt_2_361V, 
    dvc_uvt_2_367V, dvc_uvt_2_373V, dvc_uvt_2_379V, dvc_uvt_2_385V, 
    dvc_uvt_2_390V, dvc_uvt_2_396V, dvc_uvt_2_402V, dvc_uvt_2_408V, 
    dvc_uvt_2_414V, dvc_uvt_2_420V, dvc_uvt_2_426V, dvc_uvt_2_431V, 
    dvc_uvt_2_437V, dvc_uvt_2_443V, dvc_uvt_2_449V, dvc_uvt_2_455V, 
    dvc_uvt_2_461V, dvc_uvt_2_467V, dvc_uvt_2_472V, dvc_uvt_2_478V, 
    dvc_uvt_2_484V, dvc_uvt_2_490V, dvc_uvt_2_496V, dvc_uvt_2_502V, 
    dvc_uvt_2_508V, dvc_uvt_2_513V, dvc_uvt_2_519V, dvc_uvt_2_525V, 
    dvc_uvt_2_531V, dvc_uvt_2_537V, dvc_uvt_2_543V, dvc_uvt_2_549V, 
    dvc_uvt_2_554V, dvc_uvt_2_560V, dvc_uvt_2_566V, dvc_uvt_2_572V, 
    dvc_uvt_2_578V, dvc_uvt_2_584V, dvc_uvt_2_590V, dvc_uvt_2_595V, 
    dvc_uvt_2_601V, dvc_uvt_2_607V, dvc_uvt_2_613V, dvc_uvt_2_619V, 
    dvc_uvt_2_625V, dvc_uvt_2_631V, dvc_uvt_2_637V, dvc_uvt_2_642V, 
    dvc_uvt_2_648V, dvc_uvt_2_654V, dvc_uvt_2_660V, dvc_uvt_2_666V, 
    dvc_uvt_2_672V, dvc_uvt_2_678V, dvc_uvt_2_683V, dvc_uvt_2_689V, 
    dvc_uvt_2_695V, dvc_uvt_2_701V, dvc_uvt_2_707V, dvc_uvt_2_713V, 
    dvc_uvt_2_719V, dvc_uvt_2_724V, dvc_uvt_2_730V, dvc_uvt_2_736V, 
    dvc_uvt_2_742V, dvc_uvt_2_748V, dvc_uvt_2_754V, dvc_uvt_2_760V, 
    dvc_uvt_2_765V, dvc_uvt_2_771V, dvc_uvt_2_777V, dvc_uvt_2_783V, 
    dvc_uvt_2_789V, dvc_uvt_2_795V, dvc_uvt_2_801V, dvc_uvt_2_806V, 
    dvc_uvt_2_812V, dvc_uvt_2_818V, dvc_uvt_2_824V, dvc_uvt_2_830V, 
    dvc_uvt_2_836V, dvc_uvt_2_842V, dvc_uvt_2_847V, dvc_uvt_2_853V, 
    dvc_uvt_2_859V, dvc_uvt_2_865V, dvc_uvt_2_871V, dvc_uvt_2_877V, 
    dvc_uvt_2_883V, dvc_uvt_2_888V, dvc_uvt_2_894V, dvc_uvt_2_900V, 
    dvc_uvt_2_906V, dvc_uvt_2_912V, dvc_uvt_2_918V, dvc_uvt_2_924V, 
    dvc_uvt_2_930V, dvc_uvt_2_935V, dvc_uvt_2_941V, dvc_uvt_2_947V, 
    dvc_uvt_2_953V, dvc_uvt_2_959V, dvc_uvt_2_965V, dvc_uvt_2_971V, 
    dvc_uvt_2_976V, dvc_uvt_2_982V, dvc_uvt_2_988V, dvc_uvt_2_994V, 
    dvc_uvt_3_0V, dvc_uvt_3_6V, dvc_uvt_3_12V, dvc_uvt_3_17V, 
    dvc_uvt_3_23V, dvc_uvt_3_29V, dvc_uvt_3_35V, dvc_uvt_3_41V, 
    dvc_uvt_3_47V, dvc_uvt_3_53V, dvc_uvt_3_58V, dvc_uvt_3_64V, 
    dvc_uvt_3_70V, dvc_uvt_3_76V, dvc_uvt_3_82V, dvc_uvt_3_88V, 
    dvc_uvt_3_94V, dvc_uvt_3_99V, dvc_uvt_3_105V, dvc_uvt_3_111V, 
    dvc_uvt_3_117V, dvc_uvt_3_123V, dvc_uvt_3_129V, dvc_uvt_3_135V, 
    dvc_uvt_3_140V, dvc_uvt_3_146V, dvc_uvt_3_152V, dvc_uvt_3_158V, 
    dvc_uvt_3_164V, dvc_uvt_3_170V, dvc_uvt_3_176V, dvc_uvt_3_181V, 
    dvc_uvt_3_187V, dvc_uvt_3_193V, dvc_uvt_3_199V, dvc_uvt_3_205V, 
    dvc_uvt_3_211V, dvc_uvt_3_217V, dvc_uvt_3_223V, dvc_uvt_3_228V, 
    dvc_uvt_3_234V, dvc_uvt_3_240V, dvc_uvt_3_246V, dvc_uvt_3_252V, 
    dvc_uvt_3_258V, dvc_uvt_3_264V, dvc_uvt_3_269V, dvc_uvt_3_275V, 
    dvc_uvt_3_281V, dvc_uvt_3_287V, dvc_uvt_3_293V, dvc_uvt_3_299V, 
    dvc_uvt_3_305V, dvc_uvt_3_310V, dvc_uvt_3_316V, dvc_uvt_3_322V, 
    dvc_uvt_3_328V, dvc_uvt_3_334V, dvc_uvt_3_340V, dvc_uvt_3_346V, 
    dvc_uvt_3_351V, dvc_uvt_3_357V, dvc_uvt_3_363V, dvc_uvt_3_369V, 
} dvc_uvt_t;

typedef struct dvc_reg_status
{
    dvc_reg_status0_t status0;
    dvc_reg_status1_t status1;
    dvc_reg_status2_t status2;
    dvc_reg_status3_t status3;
} dvc_reg_status_t;

typedef struct dvc_reg_read_status
{
    dvc_reg_status0_t status0;
    uint16_t pec_crc0;
    dvc_reg_status1_t status1;
    uint16_t pec_crc1;
    dvc_reg_status2_t status2;
    uint16_t pec_crc2;
    dvc_reg_status3_t status3;
    uint16_t pec_crc3;
} dvc_reg_read_status_t;

typedef struct dvc_reg_cfg
{
    dvc_reg_cfg0_t cfg0;
    dvc_reg_cfg1_t cfg1;
} dvc_reg_cfg_t;
#pragma pack()


#endif // __DVC_REG_H__
